package org.duiduo.config.security.impl;

import cn.hutool.core.util.ArrayUtil;
import lombok.Setter;
import org.duiduo.util.SecurityUtil;
import org.noear.solon.auth.AuthProcessor;
import org.noear.solon.auth.annotation.Logical;

/**
 * 鉴权处理器
 *
 * @author liangze
 * @date 2025/9/29 15:29
 */
@Setter
public class AuthProcessorImpl implements AuthProcessor {

    /**
     * IP黑名单
     */
    private String[] ipBlackList;

    /**
     * 验证IP，是否有权访问
     *
     * @param ip IP
     * @return 是否有权访问
     */
    @Override
    public boolean verifyIp(String ip) {
        return !ArrayUtil.contains(ipBlackList, ip);
    }

    /**
     * 验证登录状态，用户是否已登录
     *
     * @return 是否已登录
     */
    @Override
    public boolean verifyLogined() {
        return SecurityUtil.isLogin();
    }

    /**
     * 验证路径，用户可访问
     *
     * @param path   路径
     * @param method 请求方法
     * @return 是否有权限
     */
    @Override
    public boolean verifyPath(String path, String method) {
        return true;
    }

    /**
     * 验证特定权限，用户是否有权限（会先去验证登录状态，verifyLogined为 true，才会触发）
     *
     * @param permissions 权限
     * @param logical     逻辑
     * @return 是否有权限
     */
    @Override
    public boolean verifyPermissions(String[] permissions, Logical logical) {
        return SecurityUtil.hasPermission(permissions, Logical.AND == logical);
    }

    /**
     * 验证特定角色，用户是否有角色（会先去验证登录状态，verifyLogined为 true，才会触发）
     *
     * @param roles   角色
     * @param logical 逻辑
     * @return 是否有权限
     */
    @Override
    public boolean verifyRoles(String[] roles, Logical logical) {
        return SecurityUtil.hasRole(roles, Logical.AND == logical);
    }

}
